package week7.util;

import java.util.List;

public class Sorteerder {
	
	/**
	 * Sorteer de opgegeven lijst <tt>list</tt> volgens het criterium van <tt>ord</tt>.
	 * @param list De te sorteren lijst.
	 * @param ord De ordening die aangeeft hoe de lijst moet worden gesorteerd.
	 * @require list != null && ord != null
	 * @ensure forall i:int 0 < i < list.size() : ord.lessThan(resultlist.get(i-1), resultlist.get(i))
	 */
	public static <Elem> void sorteer(List<Elem> list, Ordening<Elem> ord) {
		// Insertion Sort

		if(list.size() == 0) {
			return;
		}
		
		for(int i = 1; i < list.size(); i++) {
			int j = i - 1;
			// Zolang het item op j niet kleiner is dan wat we zoeken, verder naar beneden.
			// j > 0 zorgt dat hij stopt op 0
			Elem temp = list.get(i);
			while(!ord.lessThan(list.get(j), list.get(i)) && j >= 0) {
				list.set(j+1, list.get(j));
				j--;
			}
			// Voeg het element toe op de juiste locatie
			list.set(j+1, temp);
		}
		
	}
}
